#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=75,H=1e6+5;
int n,k,A[N],B[N],m,cnt[N],num[N],id,num2[N];
ll dp[H],dp2[H][9];
map<int,int> mp;
void dfs1(int p,int x)
{
	if(p>k)
	{
		int hs=0;
		for(int a=1;a<=k;a++)
		{
			hs=hs*(n/k+1)+num[a];
		}
		id++;
		mp[hs]=id;

		return;
	}
	for(int a=x;a<=n/k;a++) num[p]=a,dfs1(p+1,a);
}
void dfs2(int p,int x)
{
	if(p>k)
	{
		id++;
		//for(int a=1;a<=k;a++) cout<<num[a]<<" ";
		//cout<<endl;
		//cout<<dp[id]<<endl;
		int tot=0;
		for(int a=1;a<=k;a++) tot+=num[a];
		if(tot==n) return;
		if(tot>0&&A[tot]==A[tot+1]) return;
		int l=lower_bound(B+1,B+1+m,A[tot+1])-B,Max=(1<<k)-1;
		//cout<<cnt[l]<<endl;
		for(int z=0;z<=Max;z++)
		{
			int c=0,ck=1;
			for(int a=0;a<k;a++)
			{
				if(z&(1<<a))
				{
					c++;
					if(num[a+1]==n/k)
					{
						ck=0;
						break;
					}
				}
			}
			if(c!=cnt[l]||ck==0) continue;
			ll cost=0;
			for(int a=0;a<k;a++)
			{
				num2[a+1]=num[a+1];
				if(z&(1<<a))
				{
					num2[a+1]++;
					if(num2[a+1]==1) cost-=B[l];
					if(num2[a+1]==n/k) cost+=B[l];
				}
			}
			sort(num2+1,num2+1+k);
			int hs=0;
	    	for(int a=1;a<=k;a++)
	       	{
	     		hs=hs*(n/k+1)+num2[a];
	     	}
	     	hs=mp[hs];
	     	dp[hs]=min(dp[hs],dp[id]+cost);
		}
		return;
	}
	for(int a=x;a<=n/k;a++) num[p]=a,dfs2(p+1,a);
}
void solve1()
{
	id=0;
	dfs1(1,0);
	memset(dp,0x3f3f,sizeof(dp));
	dp[1]=0;
	id=0;
	dfs2(1,0);
	printf("%lld",dp[id]);
}
void dfs3(int p,int tot)
{
	if(p==0)
	{
		int hs=0;
		for(int a=1;a<=n/k;a++)
		{
			hs=hs*(k+1)+num[a];
		}
		id++;
		mp[hs]=id;
		return;
	}
	for(int a=0;a<=k;a++)
	{
		if(tot+a*p<=n) num[p]=a,dfs3(p-1,tot+a*p);
	}
}
void dfs4(int p,int tot)
{
	if(p==0)
	{
		id++;
		int l=0;
		for(int a=1;a<=n/k;a++) l+=a*num[a],num2[a]=num[a];
		if(l==n) return;
		//cout<<l<<endl;
		if(l==0||A[l]!=A[l+1])
		{
			for(int a=1;a<=n/k;a++)
			{
				ll cost=0;
				if(a==1||num2[a-1]>0)
				{
					num2[a-1]--;
					num2[a]++;
					if(a==1) cost-=A[l+1];
					if(a==n/k) cost+=A[l+1];
					//cout<<cost<<endl;
					int hs=0;
	               	for(int b=1;b<=n/k;b++)
	             	{
		             	hs=hs*(k+1)+num2[b];
	               	}
	               	hs=mp[hs];
	            //   	cout<<hs<<" "<<a<<endl;
	               	for(int b=1;b<=n/k;b++)
	               	{
						dp2[hs][a]=min(dp2[hs][a],dp2[id][b]+cost);
					}
					num2[a-1]++;
					num2[a]--;
				}
			}
		}
		else
		{
			for(int a=1;a<=n/k;a++)
			{
				ll cost=0;
				if(a==1||num2[a-1]>0)
				{
					num2[a-1]--;
					num2[a]++;
					if(a==1) cost-=A[l+1];
					if(a==n/k) cost+=A[l+1];
					int hs=0;
	               	for(int b=1;b<=n/k;b++)
	             	{
		             	hs=hs*(k+1)+num2[b];
	               	}
	               	hs=mp[hs];
	               	for(int b=a;b<=n/k;b++)
	               	{
						dp2[hs][a]=min(dp2[hs][a],dp2[id][b]+cost);
					}
					num2[a-1]++;
					num2[a]--;
				}
			}
		}
		return;
	}
	for(int a=0;a<=k;a++)
	{
		if(tot+a*p<=n) num[p]=a,dfs4(p-1,tot+a*p);
	}
}
void solve2()
{
	id=0;
	dfs3(n/k,0);
	//cout<<id<<endl;
	memset(dp2,0x3f3f,sizeof(dp2));
	dp2[1][n/k]=0;
	id=0;
	dfs4(n/k,0);
	ll ans=0x3f3f3f3f3f3f3f3f;
	for(int a=1;a<=n/k;a++) ans=min(ans,dp2[id][a]);
	printf("%lld",ans);
}
int main()
{
freopen("diyiti.in","r",stdin);
	freopen("diyiti.out","w",stdout);
	scanf("%d%d",&n,&k);
	for(int a=1;a<=n;a++) scanf("%d",&A[a]),B[a]=A[a];
	sort(A+1,A+1+n);
	sort(B+1,B+1+n);
	m=unique(B+1,B+1+n)-(B+1);
	for(int a=1;a<=n;a++)
	{
		int l=lower_bound(B+1,B+1+m,A[a])-B;
		cnt[l]++;
	}
	for(int a=1;a<=m;a++)
	{
		if(cnt[a]>k)
		{
			printf("-1");
			return 0;
		}
	}
	if(k<=n/k)
	{
		solve1();
		return 0;
	}
	solve2();
}
